#include <iostream>
#include <stdio.h>
#include <typeinfo>
using namespace std;

//// 递归终止函数
//template <class T>
//void ShowList(const T& value)
//{
//  printf("%s(%s): ", __func__, typeid(T).name()); 
//	cout << value << endl;
//}
//
//// 展开函数
//template <class T, class ...Args>
//void ShowList(const T& value, Args... args)
//{
//  printf("%s(%s, %s{%d}): ", __func__, typeid(T).name(), "Args", sizeof...(args)); 
//	cout << value << endl;
//	ShowList(args...);
//}
//
//int main()
//{
//	ShowList(1, 'A', std::string("sort"));
//	return 0;
//}

//PrintArg用于处理参数包中每一个参数
template <class T>
int PrintArg(T t)
{
  printf("%s(%s): ", __func__, typeid(T).name());
	cout << t << endl;
    return 0;
}

//展开函数
template <class ...Args>
void ShowList(Args... args)
{
	//int arr[] = { (PrintArg(args), 0)... }; //使用逗号表达式
    int arr[] = { PrintArg(args)... }; //使用函数返回值
    printf("sizeof...(args): %d\n",sizeof...(args));
    //cout << sizeof...(args) << endl;
	//cout << endl;
}

int main()
{
	ShowList(1, 'A', std::string("sort"));
	return 0;
}
